module hip.api.filesystem.fs_binding;
public import hip.api.filesystem.hipfs;

version(DirectCall){ public import hip.filesystem.hipfs; }
else version(ScriptAPI)
{
    void initFS()
    {
        import hip.api.internal;
        loadClassFunctionPointers!(HipFSBinding, UseExportedClass.Yes, "HipFileSystem");

        import hip.api.console;
        log("HipengineAPI: Initialized FS");
    }
    import hip.api.internal;
    class HipFSBinding
    {
        @disable this();
        extern(System) __gshared
        {
            string function (string path) getPath;
            bool function (string path, bool expectsFile = true, bool shouldVerify = true) isPathValid;
            bool function (string path) isPathValidExtra;
            bool function (string path) setPath;
            IHipFSPromise function (string path, out ubyte[] output) read;
            IHipFSPromise function (string path, out string output) readText;
            bool function (string path, void[] data) write;
            bool function (string path) exists;
            bool function (string path) remove;
            string function () getcwd;
            bool function (string path) absoluteExists;
            bool function (string path) absoluteIsDir;
            bool function (string path) absoluteIsFile;
            bool function (string path) isDir;
            bool function (string path) isFile;
            string function (string cacheName, void[] data) writeCache;
        }
    }
    mixin ExpandClassFunctionPointers!(HipFSBinding);
}